Алгоритм обратного распространения ошибки

>    restart:

>    with(LinearAlgebra):

Начальные веса

>    restart;

Первая строка - веса к элементу 1, вторая к 2. Последние элементы это смещение

>    W:=Matrix([[1,0.5,1],[-1,2,1]]):

Веса второго слоя (в конце смещение)

>    W2:=Vector(row,[1.5,-1,1]):

Входной сигнал( последний элемент относится к смещению, всегда=1)

>    Uin:=Vector([0,1,1]):

20 циклов для обучения сети

>    for k to 20 do

>     U2:=W.Uin;

>     U3:=convert(<map(x->1/(1+exp(-x)),U2),1>,Vector);

>     W3:=U3.W2;

Сигмоид(функция активации)

>     u5:=map(x->1/(1+exp(-x)),W3);

Ошибка выхода(цель=1)

>     delta[0]:=(1-u5)*u5*(1-u5);

Ошибки промежуточного слоя

>    delta[4]:=delta[0]*W2[2]*U3[2]*(1-U3[2]);

>    delta[3]:=delta[0]*W2[1]*U3[1]*(1-U3[1]);

Коэффициент обучения

>    ro:=0.5:

Исправляем веса (обучение)

>    for i to 3 do W2[i]:=W2[i]+ro*delta[0]*U3[i];od;

>    for i to 2 do

>      for j to 3 do

>        W[i,j]:=W[i,j]+ro*delta[i+2]*Uin[j];

>      od;

>    od;

>    W;

>    od: